package com.zh.blog.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zh.blog.dto.*;
import com.zh.blog.model.Article;
import com.zh.blog.vo.ConditionVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 文章
 * @author ZhengHao
 * Created At 2022/7/31.
 **/
@Repository
public interface ArticleDao extends BaseMapper<Article> {
    /**
     * 文章统计
     * @return 文章统计结果
     */
    List<ArticleStatisticsDto> listArticleStatistics();

    /**
     * 查询后台文章总量
     * @param conditionVO 条件
     * @return 文章总量
     */
    Long countArticleBacks(@Param("condition") ConditionVO conditionVO);

    /**
     * 查询后台文章
     * @param current 页码
     * @param size 大小
     * @param conditionVO 条件
     * @return 文章列表
     */
    List<ArticleBackDto> listArticleBacks(@Param("current") Long current,
                                          @Param("size") Long size,
                                          @Param("condition") ConditionVO conditionVO);

    /**
     * 查询首页文章
     * @param current 页码
     * @param size 大小
     * @return 文章列表
     */
    List<ArticleHomeDto> listArticles(@Param("current") Long current,
                                      @Param("size") Long size);

    /**
     * 查看文章的推荐文章
     * @param articleId 文章ID
     * @return 文章列表
     */
    List<ArticleRecommendDto> listRecommendArticles(@Param("articleId")Integer articleId);

    /**
     * 根据ID查询文章
     * @param articleId 文章ID
     * @return 文章信息
     */
    ArticleDto getArticleById(@Param("articleId") Integer articleId);

    /**
     * 根据条件查询文章
     *
     * @param current   页码
     * @param size      大小
     * @param condition 条件
     * @return 文章列表
     */
    List<ArticlePreviewDto> listArticlesByCondition(@Param("current") Long current,
                                                    @Param("size") Long size,
                                                    @Param("condition") ConditionVO condition);
}